/*
 * > /*
>  * INSANE - Interactive Structural Analysis Environment
>  *
>  * Copyright (C) 2003-2004
>  * Universidade Federal de Minas Gerais
>  * Escola de Engenharia
>  * Departamento de Engenharia de Estruturas
>  *
>  * Author's email :     insane@dees.ufmg.br
>  * Author's Website :   http://www.dees.ufmg.br/insane
>  *
>  * This program is free software; you can redistribute it and/or
>  * modify it under the terms of the GNU General Public License
>  * as published by the Free Software Foundation; either version 2
>  * of the License, or any later version.
>  *
>  * This program is distributed in the hope that it will be useful,
>  * but WITHOUT ANY WARRANTY; without even the implied warranty of
>  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>  * GNU General Public License for more details.
>  *
>  * You should have received a copy of the GNU General Public License
>  * along with this program; if not, write to the Free Software
>  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-
> 1307, USA.
 *
 */

package br.ufmg.dees.insane.ui.rich.prep.view;

import java.io.Serializable;
import java.util.ArrayList;

import br.ufmg.dees.insane.model.geo.geometricTransformations.GeoTransform;
import br.ufmg.dees.insane.util.IMatrix;

/**
 * This class stores the transformations of the model
 * @author Penna, Samuel & Ferreira, Reginaldo & Pitangueira, Roque
 * @since october 2006
 */
public class GeometricTransformation implements Serializable {

    /**   */
	private static final long serialVersionUID = 1L;

	private ArrayList<GeoTransform> transformations;
	private IMatrix matrix;
    
//  ****************************************************************************	
    /**
     * The class constructor 
     */
    public GeometricTransformation()
    {   
    	transformations = new ArrayList<GeoTransform>();
    }

//  ****************************************************************************   
    
    public void addTransformation(GeoTransform transform)
    {
    	this.transformations.add(transform);
    }
    
//  ****************************************************************************
	
	public void setTransformations(ArrayList<GeoTransform> transformations)
	{
		this.transformations = transformations;
	}  
	
//  ****************************************************************************
    
	public ArrayList<GeoTransform> getTransformations()
	{
		return transformations;
	}	
    
//  ****************************************************************************
    
    public void clearTransformation()
    {
    	this.transformations.clear();
    }
    
//  ****************************************************************************
    
    public IMatrix getMatrix()
    {
    	matrix = ((GeoTransform)transformations.get(0)).getMatrix();
    	for(int i=0;i<transformations.size();i++)
    	{
    		matrix.mul(((GeoTransform)transformations.get(i)).getMatrix());
    	}
    	return matrix;
    }
    
//  ****************************************************************************
    
    public IMatrix getInverseMatrix()
    {
    	return matrix.inverse();
    }
    
//  ****************************************************************************   
}//end of This Class